package com.sduept.nwld.mobile.rest;

import com.alibaba.fastjson.JSONObject;
import com.sduept.bigdata.document.entity.core.RecordImage;
import com.sduept.bigdata.equipment.assessment.dto.EquipmentDTO;
import com.sduept.bigdata.equipment.assessment.model.inspection.InspectionQuestionEquipmentFeedback;
import com.sduept.cim.ledger.model.SubstationLedger;
import com.sduept.nwld.dataserver.equipment.assessment.mobile.dto.*;
import com.sduept.nwld.mobile.rest.impl.Rtn;

import java.util.List;
import java.util.Map;


/**
 * 精益化评价APPrest接口（包含待办，评价等接口）
 * @author zht
 *
 */

public interface InspectionTaskService{
	
	/**获取未完成的评价计划(评价进度)
	 * @param code 登录人员账号
	 * @return
	 */


	public List<InspectionPlanDTO> getUnfinishedInspectionPlans( String userCode);
	
		
	/**根据计划id获取所有的评价厂站(评价进度)
	 * @param 
	 * @return
	 */


	public List<InspectionStationDTO> getInspectionStationsByPlanId( String planId, String userCode);
	
	/**根据APP账号(人员code)获取未完成的评价厂站（即未完成的计划下所有有权限的厂站，待办任务）
	 * @param userCode APP登陆人账号对应web端人员code
	 * @return
	 */


	public List<InspectionStationDTO> getTaskByUserCode( String userCode);
	
	
	
	
	
	/**根据InspectionStationId获取所有的检查条目
	 * @param InspectionStationId
	 * @return
	 */


	public List<InspectionItemDTO> getItemsByInspectionStationId( String inspectionStationId);
	
	
	
	/**set Staiton的实际开始时间
	 * @param startTimeMils
	 * @return
	 */


	public Rtn setInspectionStationStartTime( String inspectionStationId, long startTimeMils);
	
	/**获取（可用的available=1）标准库所有记录
	 * @return
	 */


	public List<StandardLibItemDTO> getStandardLibItems() ;
	
	/**批量上传评价项目
	 * @param params
	 * [{	
	 *  "id":item.id,
         "deduct":item.deductPoint,
         "problemDevice":item.problemDevice,
         "description":item.description,
         "reformPlan":item.reformPlan,
         "reformDateStr":item.reformDateStr,
          "actualAssessmentExpertName":"ruansy",
         'actualAssessmentExpertId': "5d4a73fced0cb52c0ceefdfc",
         'inspectTimeMils': inspectTimeMils,
         },{},{}]
	 * @return  success/fail
	 */


	public Rtn updateInspectItems( String param);
	
	
	/**上传一个评价项目
	 * @param InspectionItemDTO4APP
	 * @return  success/fail
	 */


	public Rtn upLoadInspectItemDTO( String param);
	
	
	
	/**
	 * 上传图片
	 * @param param
	 * @return
	 */


	public Rtn uploadImage( String param);
	
	
	
	/**
	 * 批量删除图片
	 * @param param
	 * @return
	 */


	public Rtn deleteImagesByIds( String param);
	
	
	/**
	 * 根据inspectionItemId获取相关的图片记录
	 * @param oid
	 * @return
	 */


	public List<RecordImage> getRecordImagesByOid(String oid);
	
	
	/**
	 * 根据inspectionItemId获取相关的图片记录数量
	 * @param oid
	 * @return
	 */


	public int getRecordImageCountByOid( String oid);
	
	
	/**
	 * 根据RecordImageId,获取原图片的base64字符串
	 * @param id
	 * @return
	 */


	public Rtn getImageStrById( String id);
	
	
	
	/**
	 * 根据RecordImageId,获取缩略图的base64字符串
	 * @param id
	 * @return
	 */


	public Rtn getImageThumbnailStrById( String id);
	
	
	/**
	 * 查询已完成的历史评价厂站（按照计划分组）
	 * @param params{"code":code,"startTime"}
	 * @return
	 */


	public List<InspectionPlanDTO> getHistoryInspectStations( String params);
	
	
	/**
	 * 获取所有的评价相关的文件夹和文件
	 * @return {"dir":[CommonDocumentDir],"doc":[Document]}
	 */


	public JSONObject getAllDocument();
	
	/**根据目录id该文件夹下的所有子文件以及子文件夹
	 * @param dirId
	 * @return
	 */


	public EvaluateDirDTO getAllDocumentByDirId( String dirId);
	
	
	
	/**根据id下载文件
	 * @param fileId
	 * @return
	 */


	//@Produces({ "text/plain;charset=UTF-8"}) todo sprinbboot
	public String downLoadFile( String fileId);

	
	/**批量上传问题设备列表
	 * @param {"inspectionStationId":inspectionStationId,"questionEquipments":[InspectionQuestionEquipmentDTO,InspectionQuestionEquipmentDTO]};
	 * @return
	 */


	public Rtn uploadQuestionEquipments(String params);
	
	/**批量删除问题设备，将自动删除问题设备关联的图片
	 * @param {"inspectionStationId":inspectionStationId,"ids":[InspectionQuestionEquipmentId,InspectionQuestionEquipmentId,...]}; 
	 * @return
	 */

	public Rtn deleteQuestionEquipments( String params);
	
	
	/**更新问题设备的status,被检单位确认问题
	 * @param params
	 * @return
	 */


//	@Consumes({ "application/json" })
	public int updateQuestionEquipmentStatus( Map<String,String> json);
	
	/**
	 * 根据运维单位的名称获取变电站
	 * @param fileId
	 * @return
	 */

	public List<SubstationLedger> getSubstationByMaintenanceUnit( String mname);
	
	/**
	 * 根据变电站Id获取变电站的所有设备列表
	 * @param sid
	 * @return
	 */


	public List<EquipmentDTO> getEquipmentByStationId( String sid);
	
	
	/**
	 * 移动端专家登录后可以丛移动端选择要检查得变电站，上传信息为 InspectionStation 中回填信息
	 * @param params [id,stationId,stationType(智能站、常规站),startTime,endTime]
	 * @return Rtn
	 */


	public Rtn generateInspectionStation(  String params);
	
	
	
	/**查询所有的计划名称(统计分析)
	 * @param 
	 * @return [{id:"",name:""}]
	 */


	public List<Map<String,String>> getAllInspectionPlanNames();
	
	
	/**根据计划id查询(统计分析)
	 * @param 
	 * @return
	 */


	public InspectionPlanDTO getInspectionPlanById( String planId);

	
	/**根据计划id统计厂站扣分分布情况(统计分析)
	 * @param 
	 * @return  {"pieChart":{"[0-20]": 0,"[20-40]":0},"deductList":[{"stationName":""，"deduct":""},{"stationName":""，"deduct":""}]}
	 */


	public JSONObject getStationDeductDistributionByPlanId( String planId);
	
	
	/**根据计划id统计问题设备风险分布情况(统计分析)
	 * @param 
	 * @return  {"一级":XX,"二级":XX,"三级":XX,"四级":XX}
	 */


	public Map<String,Integer> getQuestionRiskDistributionByPlanId( String planId);
	
	
	/**
	 * 根据itemId获取相应的被检单位意见反馈
	 * @param itemId
	 * @return
	 */


	public InspectionQuestionEquipmentFeedback getFeedbackByItemId( String itemId);
	
	/**
	 * 根据inspectionStationId获取相应的被检单位意见反馈
	 * @param itemId
	 * @return
	 */


	public List<InspectionQuestionEquipmentFeedback> getFeedbackByInspectionStationId( String inspectionStationId);
	
	
	/**
	 * 根据itemId存储相应的被检单位意见反馈
	 * @param itemId
	 * @return
	 */


	public Rtn saveFeedbackByItemId( String param);
	
	
	
	/**
	 * 批量存储相应的被检单位意见反馈
	 * @param [feedback,feedback]
	 * @return
	 */


	public Rtn saveFeedbacks( String param);
	
	
	/**保存自定义问题设备EquipmentDTO
	 * @param equipmentDTO
	 * @return
	 */


	public Rtn saveEquipment( String equipmentDTO);
	
	/**获取所有的厂站类型
	 * @return
	 */


	public List<String> getAllEquipmentTypes();
}
